# 求两个数的最大公因数


# 方法一
def max_gcd_1(a, b):
    """
    计算两个整数的最大公因数（GCD）。

    参数:
    a -- 第一个整数
    b -- 第二个整数

    返回值:
    返回a和b的最大公因数
    """
    # 确保a始终大于等于b
    if a < b:
        a, b = b, a
    # 使用欧几里得算法计算最大公约数
    while b != 0:
        a, b = b, a % b
    return a


# 方法二
import math


def max_gcd_2(a, b):
    return math.gcd(a, b)


"""
方法三：可以使用枚举法
"""


if __name__ == "__main__":
    a = 54
    b = 18
    print("最大公因数为：", max_gcd_2(a, b))


# 计算多个数的最大公约数
def gcd_of_numbers(*args):
    """
    计算给定数字列表的最大公约数（GCD）。

    参数:
    *args - 可变参数，表示要计算最大公约数的多个整数。

    返回值:
    返回给定整数列表的最大公约数。
    """
    if not args:
        raise ValueError("No numbers provided")  # 如果没有提供数字，抛出异常
    result = args[0]  # 初始化结果为第一个数字
    for num in args[1:]:  # 从第二个数字开始遍历
        result = math.gcd(result, num)  # 更新结果为当前数字与结果的最大公约数
    return result
